<?php

namespace app\controller;

use app\common\Tool;
use support\Request;
use Kingbes\Attribute\Annotation;
use app\common\Tree;
use app\model\Options;
use app\model\Admins;
use app\validate\AdminValidate;

#[Annotation(title: "网站设置", auth: true)]
class ConfigController
{
    #[Annotation(title: "基础配置")]
    public function base(Request $request)
    {
        // 获取配置
        $config = file_get_contents(public_path("pear.config.json"));
        // 转换
        $data_config = json_decode($config, true);
        // 获取选项
        $Options = Options::get();
        // 合并数据
        $arr = $Options + $data_config;
        // 返回
        return json($arr);
    }

    #[Annotation(title: "菜单栏")]
    public function menu()
    {
        // 获取管理员信息
        $Admin = session('Admin');
        // 获取菜单数据
        $data = Tool::getMenu($Admin);
        // 树形
        $Tree = new Tree($data);
        // 返回
        return json($Tree->buildTree());
    }

    #[Annotation(title: "基本资料")]
    public function info(Request $request)
    {
        // 获取管理员信息
        $Admin = session('Admin');
        $find = Admins::find($Admin->id);
        // 赋值
        assign($find->toArray());
        // 表单提交
        if ($request->method() === "POST") {
            // 数据
            $all = $request->all();
            $all["id"] = $Admin->id;
            // 验证
            try {
                // 验证
                validate(validate: AdminValidate::class, scene: $all["m"], data: $all);
                if(isset($all["newPassword"]) && $all["newPassword"] != "") {
                    $all["password"] = password_hash($all["newPassword"], PASSWORD_BCRYPT);
                }
                // 更新
                $res = Admins::update($all);
                // 返回
                return success(msg: "保存成功", data: $res);
            } catch (\think\exception\ValidateException $e) {
                // 返回验证错误
                return error(
                    msg: $e->getError()["msg"],
                    data: $e->getError()["key"]
                );
            }
        }
        // 输出模板
        return fetch();
    }

    #[Annotation(title: "系统设置", view: true, auth: true)]
    public function systems(Request $request)
    {
        $data = Options::get();
        // 赋值
        assign($data);
        // 表单提交
        if ($request->method() === "POST") {
            // 数据
            $all = $request->all();
            // 保存
            $res = Options::saves($all);
            if ($res) {
                return success("保存成功");
            } else {
                return error("保存失败");
            }
        }
        // 输出模板
        return fetch();
    }
}
